 /******************\
|   *** pile.c ***   |
 \******************/

#include "pile.h"

//Creation de la Pile
Pile* creerPile (){
	Pile *p=malloc(sizeof(Pile));
	//init du premier element de la pile a NULL
	p->premierElem=NULL;
	//init de la taille de la pile a 0
	p->taille=0;

	return p;
}

//Fonction empiler() permet d'ajouter un element dans la pile (element tout en haut de la pile)
void empiler (Pile *p, void *e){
	Element *elemt = malloc(sizeof(Element));
	/*
	** Element
	*/
	//la donnee de l'element prend comme valeur e
	elemt->donnee=e;
	//fait pointer l'element suivant de vers le premier element actuel de la pile
	elemt->elemSuivant=p->premierElem;

	/*
	** Pile
	*/
	//le premier element de la pile prend maintenant la valeur de l'element cree precedemment
	p->premierElem=elemt;
	//on agrandit la taille de la pile
	p->taille++;
}

//Fonction depiler() permet d'enlever l'element en haut de la pile (le dernier element entre)
void depiler (Pile *p){
	Element *elemSuiv = malloc(sizeof(Element));
	
	p->premierElem=p->premierElem->elemSuivant;
	freePile(p, elemSuiv);
	p->taille--;
}

//Libere l'espace aloue par le premier elem de la pile
void freePile(Pile *p, Element *e){
	e=p->premierElem;
	free(e);
}

void affiche(Pile *p){
	printf("La pile contient %d elements\n", p->taille);
}